class SalidaController < ApplicationController

  def list
    
    if perfil_nacional?
      @ordenes = OrdenSalida.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'created_at DESC'
    else
      ejecutivos = find_children_ids(Ejecutivo.find(session[:user]))
      conditions = [
        "ejecutivo_id IN (:children_ids) AND status_id = 1",
        {:children_ids => ejecutivos}
      ]
      @ordenes = OrdenSalida.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'created_at DESC', :conditions => conditions

    end
            
  end

  def show
    @orden = OrdenSalida.find(params[:id])
    @total_botellas = 0
    @orden.orden_salida_detalles.each do |o|
      @total_botellas += o.cantidad
    end
    
    @imprimir_becle = @orden.detalles_becle.size > 0
    @imprimir_cuervo = @orden.detalles_cuervo.size > 0
  end
  
  def index
    list
    
    render :action => "list"
  end
  
  def print_cuervo
    @orden = OrdenSalida.find(params[:id])
    @ejecutivo = Ejecutivo.find(@orden.ejecutivo_id)
    @jefe = Ejecutivo.find(@orden.autorizar_id)
    @total_botellas = 0
    @total_importe = 0
    @orden.detalles_cuervo.each do |o|
      @total_botellas += o.botellas
      # TODO: actualizar manejo de precios
      @total_importe += o.precio_publico*o.botellas
    end
    @leyenda = generar_leyenda(@orden.tipo_referencia)
    
    render :action => "print_cuervo", :layout => false
  end
  
  def print_becle
    @orden = OrdenSalida.find(params[:id])
    @ejecutivo = Ejecutivo.find(@orden.ejecutivo_id)
    @jefe = @ejecutivo.parent
    @total_botellas = 0
    @total_importe = 0
    @orden.detalles_becle.each do |o|
      @total_botellas += o.botellas
      # TODO: actualizar manejo de precios
      @total_importe += o.precio_publico*o.botellas
    end
    @leyenda = generar_leyenda(@orden.tipo_referencia)
    
    render :action => "print_becle", :layout => false
  end

  def generar_leyenda(tipo_documento)
    referencia_documento = ""
    leyenda = ""
    case tipo_documento
    when OrdenSalida::TIPO_REFERENCIA[:evaluacion]
      referencia_documento = Evaluacion.find(@orden.referencia_id).consecutivo
      leyenda = "Orden generada desde la Evaluacion #{referencia_documento}"
      
    when OrdenSalida::TIPO_REFERENCIA[:presencia]
      referencia_documento = Presencia.find(@orden.referencia_id).consecutivo
      leyenda = "Orden generada desde la Presencia #{referencia_documento}"
      
    when OrdenSalida::TIPO_REFERENCIA[:promocion]
      referencia_documento = Promocion.find(@orden.referencia_id).consecutivo
      leyenda = "Orden generada desde la Promocion #{referencia_documento}"
      
    when OrdenSalida::TIPO_REFERENCIA[:bonificacion_especie]
      leyenda = "Orden generada para pago de Bonificacion en Especie"
      
    else
      leyenda = "S/R"
      
    end

    leyenda
  end
  
  def txt_export
    conditions = {}
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)
    
    if perfil_nacional?
      @ordenes = OrdenSalida.find(:all)
    else
      conditions[:ejecutivo_id] = these_children
      @ordenes = OrdenSalida.find(:all, :conditions => conditions)
      
    end
    
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      csv << ["Ejecutivo", "No. de Orden", "Fecha", "Referencia", "Centro de Consumo",
        "Tipo de Presupuesto", "En atencion de", "Producto", "Costo Cuervo",
        "Cantidad", "Subtotal"
      ]
      @ordenes.each do |orden|
        orden.orden_salida_detalles.each do |od|
          csv << [Ejecutivo.find(od.orden_salida.ejecutivo_id).nombre_completo, od.orden_salida.consecutivo, od.orden_salida.created_at, od.orden_salida.referencia_id, Centro.find(od.orden_salida.centro_id).nombre_comercial,
            Catalogo.valor('Origen Presupuesto', od.orden_salida.tipo_presupuesto_id), od.orden_salida.en_atencion_de, Producto.find(od.producto_id).descripcion, od.costo_unitario,
            od.cantidad, (od.costo_unitario * od.cantidad)
          ]
          
        end
      end
    end
    
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'ordenes_salida.csv')
        
  end
  
  def anteriores
    @fecha = {}
    @fecha[:referencia] = 15.days.ago
    
    unless params[:fecha].blank?
      raise
    else  
    end
 
  end

  def search
    unless params[:search].blank?
      conditions = ["concatenado LIKE ?","%#{params[:search]}%"] unless params[:search].nil?
      @ordenes = BusquedaOrdenSalida.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'created_at DESC',
        :conditions => conditions
      #      :conditions => Centro.conditions_by_like(params[:search])
      @ordenes_count = @ordenes.size
      logger.info "Resultado de la busqueda: #{@ordenes_count} ordenes de salida encontradas"
    else
      list
    end
    render :action =>'search', :layout => true
    
  end
  
  def print_cuervo_cajas
    @orden = OrdenSalida.find(params[:id])
    @ejecutivo = Ejecutivo.find(@orden.ejecutivo_id)
    @jefe = Ejecutivo.find(@orden.autorizar_id)
    @total_botellas = 0
    @total_importe = 0.0
    @orden.detalles_cuervo.each do |o|
      botellas_caja = Producto.find(o.producto_id).botellas_caja
      @total_botellas += o.cajas
      # TODO: actualizar manejo de precios
      @total_importe += o.precio_publico*(o.cajas*botellas_caja)
    end
    @leyenda = generar_leyenda(@orden.tipo_referencia)
    
    render :action => "print_cuervo_cajas", :layout => false
    
  end
  
  def print_becle_cajas
    @orden = OrdenSalida.find(params[:id])
    @ejecutivo = Ejecutivo.find(@orden.ejecutivo_id)
    @jefe = @ejecutivo.parent
    @total_botellas = 0
    @total_importe = 0
    @orden.detalles_becle.each do |o|
      botellas_caja = Producto.find(o.producto_id).botellas_caja
      @total_botellas += o.cajas
      # TODO: actualizar manejo de precios
      @total_importe += o.precio_publico*(o.cajas*botellas_caja)
    end
    @leyenda = generar_leyenda(@orden.tipo_referencia)
    
    render :action => "print_becle_cajas", :layout => false
    
  end
end
